home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / menu / kiwi / demoprg / demo.c next >
Encoding:
C/C++ Source or Header  |  1992-04-13  |  13.9 KB  |  584 lines

  1. #include<string.h>
  2. #include<kiwi_inc.h>
  3. #include<kiwilib.h>
  4. #include<kiwipro.h>
  5. #include<demopro.h>
  6. #include<kiwi_mem.h>
  7.  
  8. /*     Initialisiere Hauptmenueleiste                    */
  9. MENU hauptmenu[7]={
  10. " ≡ ",1,1,"Zeigt Programminformationen an",
  11. "Datei",0,1,"Zeigt die Dateierfassungsmöglichkeiten",
  12. "Windows",0,1,"Demonstriert die Windowfunktionen",
  13. "Editor",0,1,"Zeigt die Möglichkeiten der Datenerfassung",
  14. "Druck",1,1,"Druckt eine Datei auf dem Ausgabekanal",
  15. "Diverses",1,1,"Zeigt diverse Funktionen",
  16. "Festlegungen",0,1,"Setzen Sie die Programmfestlegungen",
  17. };
  18.  
  19.  
  20.  
  21. MENU about[1]={
  22. "Information",0,1,""
  23. };
  24.  
  25.  
  26.  
  27. /*     initialisiere Dateimenu                        */
  28. MENU dateis[9]={
  29. "Lösche Datei       ",0,1,"Löscht die Erfaßte Datei",
  30. "───────────────────",-1,0,"",
  31. "Array Hole Datei   ",0,1,"Erfaßt eine Datei mit array_get_files",
  32. "Broswe Hole Datei  ",0,1,"Erfaßt eine Datei mit browse_get_files",
  33. "───────────────────",-1,0,"",
  34. "Verschlüssele Datei",3,1,"Verschüsselt die Sourcedatei demo.c",
  35. "Entschlüssele Datei",2,0,"Entschlüsselt die verschlüsselte Datei",
  36. "───────────────────",-1,0,"",
  37. "Beende Programm    ",3,1,"Beendet das Programm",
  38.  
  39. };
  40.  
  41.  
  42.  
  43.  
  44. /*    Initialisiere Windows Haupmenu                    */
  45. MENU windows[7]={
  46. "Dynamische ",0,1,"Demonstriert die Möglichkeiten Dynamischer Fenster",
  47. "Stapeln    ",1,1,"Stapelt beliebig viele Fenster aufeinander",
  48. "───────────",-1,0,"",
  49. "Beschreiben",1,1,"Schreibt in alle Bildschirmfenster gleichzeitig",
  50. "Einfärben  ",0,1,"Ändert die Farbe eines Bildschirmfensters",
  51. "───────────",-1,0,"",
  52. "Verfügbar  ",1,1,"Zeigt die Funktion choose_button",
  53. };
  54.  
  55.  
  56. /*    Initialisiere Windows Verfügbar Menü                    */
  57. MENU windowsm[6]={
  58. "Dynamische ",0,1,"Demonstriert die Möglichkeiten Dynamischer Fenster",
  59. "Stapeln    ",1,1,"Stapelt beliebig viele Fenster aufeinander",
  60. "Beschreiben",1,1,"Schreibt in alle Bildschirmfenster gleichzeitig",
  61. "───────────",-1,0,"",
  62. "Einfärben  ",0,1,"Ändert die Farbe eines Bildschirmfensters",
  63. "Verfügbar  ",1,1,"Zeigt die Funktion choose_button",
  64. };
  65.  
  66.  
  67.  
  68. /*     Initialisiere Windows bewegen untermenu            */
  69. MENU windows2[2]={    
  70. "Automatisch",0,1,"Bewegt Fenster automatisch",
  71. "Manuell    ",0,1,"Bewegt ein Fenster nach der Maus oder per Cursor",
  72. };
  73.  
  74.  
  75.  
  76. /*     Initialisiere Diversesmenu                */
  77. MENU diverses[12]={    
  78. "Sirene              ",0,1,"Emuliert eine Sirene",
  79. "Uhr                 ",0,1,"Zeigt eine Digitaluhr",
  80. "Memory Check        ",0,1,"Allokieren Sie Speicher, dir Meory Shell wird sich melden",
  81. "───────────────────",-1,0,"",
  82. "Mausspeed           ",0,1,"Stellen Sie die Mauszeigerempfindlichkeit ein",
  83. "Sliderdarstellung   ",0,1,"Zeigt einen Slider in Aktion",
  84. "───────────────────",-1,0,"",
  85. "Reaktionstest       ",0,1,"Testen Sie Ihre Reaktion",
  86. "Hilfetaste festlegen",0,1,"Setzt die Hilfetastenkombination fest",
  87. "Speicher Verfügbar  ",1,1,"Zeigt den verfügbaren Speicher",
  88. "───────────────────",-1,0,"",
  89. "Index               ",4,1,"Übersicht über alle Funktionen",
  90. };
  91.  
  92.  
  93.  
  94.  
  95. #define STRING_LEN 60
  96. int screen_mode;
  97. long int maus_speed;
  98. unsigned long coreleft();
  99.  
  100.  
  101.  
  102.  
  103. /*****************************************************************************
  104. *Name :main
  105. *Typ  :
  106. *Zweck:Programmeinstieg
  107. *
  108. *
  109. *        Name    Typ    Zweck
  110. *Aufrufpara :
  111. *
  112. *Rueckgabep :
  113. *
  114. *Funktionswt:        0    Immer
  115. *
  116. *****************************************************************************/
  117. main()
  118. {
  119. int c,ende=0;
  120. static WINDOW win,win1,sw1,sw2; 
  121.  
  122. win=win1=sw1=sw2=0;    /* Setze Fenster auf Null= Screen    */
  123. sm_load_fixes();
  124. init_tools();        /* Initialisiere das Programm        */
  125.  
  126. init_main_menu(hauptmenu,7);    /* setze Haupleiste fest    */
  127. display_string("Hilfe=F1",0,AR,1);
  128. set_help_name("Demoprogramm");    /* Setze Hilfsbegriff    */
  129. get_help();            /* Hole Hilfe        */
  130.  
  131. while(!ende)            /* Bis nicht Ende angewaehlt    */
  132. {                /* Hauptverteiler        */
  133.     set_help_name("Demoprogramm");
  134.     c=choose_main_menu();    /* Waehle aus Hauptleiste    */
  135.     switch(c){
  136.         case 0: aboutmenu();
  137.             break;
  138.  
  139.         case 1: ende=dateimenu();
  140.             break;
  141.  
  142.         case 2: windowmenu();
  143.             break;
  144.  
  145.         case 3: editmenu();
  146.             break;
  147.  
  148.         case 4: druckmenu();
  149.             break;
  150.  
  151.         case 5: diversesmenu();
  152.             break;
  153.  
  154.         case 6: festlegungsmenu();
  155.             break;
  156.  
  157.  
  158.  
  159.  
  160.         default:break;
  161.         }
  162. }
  163.  
  164. reset_tools();        /* Befreie alle Speicher und setzte alles zurueck    */
  165.  
  166. return(0);
  167. }
  168.  
  169.  
  170. /*****************************************************************************
  171. *Name :aboutmenu
  172. *Typ  :int
  173. *Zweck:Steuert das Infomenue
  174. *
  175. *
  176. *        Name    Typ    Zweck
  177. *Aufrufpara :
  178. *
  179. *Rueckgabep :
  180. *
  181. *Funktionswt:        0 Immer
  182. *
  183. *****************************************************************************/
  184. int aboutmenu()
  185. {
  186. int wahl;
  187. WINDOW sw1=0;
  188.  
  189. wahl=choose_sub_menu(about,1,&sw1);    /* Waehle aus Submenu    */
  190. switch(wahl){
  191. case 0:{
  192.     set_help(WEITER_OFF);
  193.     set_help_name("ProgrammInfo");
  194.     get_help();
  195.     set_help(WEITER_ON);
  196.     break;}
  197.  
  198. default:{break;}
  199. }
  200. close_window(sw1);
  201. return(0);
  202. }
  203.  
  204.  
  205. /*****************************************************************************
  206. *Name :zeige_index
  207. *Typ  :int
  208. *Zweck:Ermoeglicht das Blättern in der Indexdatei
  209. *
  210. *        Name    Typ    Zweck
  211. *Aufrufpara :
  212. *
  213. *Rueckgabep :
  214. *
  215. *Funktionswt:        0     immer
  216. *
  217. *****************************************************************************/
  218. int zeige_index()
  219. {
  220. reset_help();                /* Alte Datei abklemmen        */ 
  221. init_help("index");            /* Neue Datei initialisieren    */
  222. set_help(UNFORMATIERT);            /* Nicht formatieren        */
  223. browse_help();                /* Blätere durch Hilfe        */
  224. reset_help();                /* Neue datei abklemmen        */
  225. init_help("demo");            /* Alte datei initialiseren    */
  226. set_help(FORMATIERT);            /* Formatieren            */
  227. set_help_color(VHELLWEIS | HROT,VGELB | HBLAU);    /* Farbe setzen        */
  228. set_help_name("Demoprogramm");        /* Setze Hilfsbegriff        */
  229.  
  230. return(0);
  231. }
  232.  
  233.  
  234.  
  235. /*****************************************************************************
  236. *Name :diversesmenu
  237. *Typ  :int
  238. *Zweck:Steuert das Diverses Geschehen
  239. *
  240. *
  241. *        Name    Typ    Zweck
  242. *Aufrufpara :
  243. *
  244. *Rueckgabep :
  245. *
  246. *Funktionswt:        0 Immer
  247. *
  248. *****************************************************************************/
  249. int diversesmenu()
  250. {
  251. int i,c,wahl,status;
  252. unsigned int summe=0;
  253. WINDOW sw1=0,sb=0;
  254. ZEIT time;
  255. char buffer[20];
  256.  
  257. init_string(buffer,sizeof(buffer));
  258. wahl=choose_sub_menu(diverses,12,&sw1);    /* Waehle aus Submenu    */
  259. switch(wahl){
  260. case 0:{
  261.     for(i=20;i<6000;i+=100)kw_sound(i,4);    /* Sirene    */
  262.     for(i=6000;i>20;i-=100)kw_sound(i,4);
  263.     break;}
  264. case 1:{
  265.     sb=open_window("Uhrzeit",27,10,53,14,EINFACH);
  266.     set_help_name("Uhr");
  267.     display_string("Die Uhrzeit ist",sb,AM,1);
  268.     display_string("Beliebige Taste für Ende",sb,AM,3);
  269.     do
  270.     {
  271.         get_system_time(&time);
  272.         display_time(&time,sb,AM,2,"z");
  273.     }while(!input());        
  274.     close_window(sb);
  275.     break;}
  276. case 2:{
  277.     set_help_name("Memory Shell");
  278.     sb=load_window("demo13.wnd");
  279.     i=scanf_mask(sb,0,"x",&summe);
  280.     if(i==13)malloc(summe);
  281.     close_window(sb);
  282.     break;}
  283.  
  284. case 4:    set_help_name("Maus Speed");
  285.     maus_speed=(long)roll_bar("Setzen Sie die Mausgeschwindigkeit fest",
  286.         (float)maus_speed,0.,100.,1.,40,AM,AM);/* Nur Schall und Rauch    */
  287.     break;
  288.  
  289.  
  290. case 5: set_help_name("Slidertest");
  291.     init_slider("Das ist ein Test \n um einen Slider darzustellen \n Hier würde dann Ihr Text stehen",AM,AM,60,200l);
  292.     for(i=0;i<200;i++)
  293.     {
  294.         kw_wait(5);
  295.         add_slider(1l);
  296.     }
  297.     reset_slider();
  298.     break;
  299.  
  300. case 7:{
  301.     set_help_name("Reaktionstest");
  302.     reaktionstest();    
  303.     break;}
  304.  
  305.  
  306. case 8: sb=open_window("Hilfetasten",18,10,62,16,DOPPELT);
  307.     set_help_name("Hilfetaste");
  308.     display_string("Tippen Sie nun die Tastenkombination",sb,AM,1);
  309.     display_string("die zur Auslösung der Hilfe führen soll",sb,AM,2);
  310.     c=wait_input();            /* Hole taste    */
  311.     status=get_input_status();    /* Hole Status    */
  312.     i=(status << 8) | c;        /* Baue Schluessel    */
  313.     set_help_mask(i);        /* Setze neue Maske    */
  314.     strcpy(buffer,"Hilfe=");    /* Baue Anzeige zusammen    */
  315.     if(status & 3)strcat(buffer,"Shift+");
  316.     if(status & 4)strcat(buffer,"Ctr+");
  317.     if(status & 8)strcat(buffer,"Alt+");
  318.     if(status & 16)strcat(buffer,"Fn ");
  319.     i=strlen(buffer);
  320.     if(status & 16){
  321.         if(c<10)buffer[i]=c+48;
  322.         else {buffer[i++]=49;buffer[i]=48;}
  323.     }        
  324.     else buffer[i]=toupper(c);
  325.  
  326.     display_string(buffer,sb,AM,3);
  327.     kw_wait(250);            /* Warte 2,5 Sekunden zum lesen */    
  328.     close_window(sb);
  329.     INVERS
  330.     display_string("         ",0,AR,1);/* Loesche hilfshinweis    */
  331.     NORMAL
  332.     break;
  333.  
  334.  
  335. case 9 :set_help_name("Speicherbedarf");
  336.     sb=open_window("Speicherplatz",50,5,AM,AM,EINFACH);
  337.     wlocate(sb,1,1);
  338. #ifdef MS_C
  339.  
  340.     printw(sb,"Im aktuellen Datensegment sind \n zur Zeit %d KB verfügbar ",_memavl());
  341. #endif
  342. #ifdef TURBO_C
  343.  
  344.     printw(sb,"Es ist zur Zeit noch \n %ld KB Hauptspeicher verfügbar ",coreleft());
  345. #endif
  346.  
  347.  
  348.  
  349. /* zeige momentanen Speicherplatz im Datensegment */
  350.     wait_of_action();
  351.     close_window(sb);
  352.     break;
  353.  
  354. case 11:{
  355.     set_help_name("Index");
  356.     zeige_index();
  357.     break;
  358.     }
  359.  
  360.  
  361. default:{break;}
  362. }
  363. close_window(sw1);
  364. return(0);
  365. }
  366.  
  367.  
  368.  
  369.  
  370. /*****************************************************************************
  371. *Name :dateimenu
  372. *Typ  :int
  373. *Zweck:Steuert das Geschehen bei Dateimenu
  374. *
  375. *
  376. *        Name    Typ    Zweck
  377. *Aufrufpara :
  378. *
  379. *Rueckgabep :
  380. *
  381. *Funktionswt:        0    Immer
  382. *
  383. *****************************************************************************/
  384. int dateimenu()
  385. {
  386. int i,wahl,anzahl,ende=0;
  387. WINDOW sw1=0,sb=0,en1=0,en2=0;
  388. char pfad[DATEI_PFAD_LEN],dateiname[DATEI_NAME_LEN];
  389. char datei_name[DATEI_PFAD_NAME_LEN];
  390. double auftritt,abweichung,koeff;
  391. long int n;
  392.  
  393. init_string(pfad,sizeof(pfad));            /* Loesche Strings     */
  394. init_string(dateiname,sizeof(dateiname));
  395. init_string(datei_name,sizeof(datei_name));
  396.  
  397.  
  398. wahl=choose_sub_menu(dateis,9,&sb);        /* Waehle Submenu    */
  399. set_color_table(4);                /* Setze Farbtabelle 4    */
  400. switch(wahl){
  401. case 0:    set_help_name("Dateierfassung Löschen");
  402.     sw1=load_window("demo4.wnd");
  403.     i=scanf_mask(sw1,0,"%51s",pfad);
  404.     if(i==13)
  405.     {
  406.         set_color_table(1);
  407.         if(array_get_files(dateiname,pfad,AL,AL)==1)    /* Hole Datei    */
  408.         {    
  409.             create_file_path(datei_name,pfad,dateiname);
  410.             print_mask(sw1,1,"%51s",datei_name);
  411.             if(dialog2("Das ist ihre letzte Chance die Datei zu behalten \n Wollen Sie die Datei wirklich löschen",
  412.                 "Löschen","Behalten",AM,get_screen_height()-5))
  413.                 kill_selectet_file(datei_name);
  414.         }    
  415.     }
  416.     close_window(sw1);
  417.     break;
  418.  
  419. case 1: break;
  420.  
  421.  
  422. case 2:    display_file_content();    
  423.     break;
  424.  
  425. case 3:    set_help_name("Dateierfassung Browse");
  426.     sw1=load_window("demo4.wnd");
  427.     i=scanf_mask(sw1,0,"%51s",pfad);
  428.     if(i==13)
  429.     {
  430.         set_color_table(1);
  431.         if(browse_get_files(dateiname,pfad,5,5)==1)/* Hole Datei    */
  432.         {    
  433.             create_file_path(datei_name,pfad,dateiname);
  434.             print_mask(sw1,1,"%64s",datei_name);
  435.             display_string("Bitte eine Taste für weiter",sw1,AM,5);
  436.             wait_of_action();
  437.             browse_file(datei_name,132);
  438.         }    
  439.     }
  440.     close_window(sw1);
  441.     break;
  442.  
  443. case 4: break;
  444.  
  445. case 5:    sw1=load_window("demo2.wnd");
  446.     set_help_name("Dateiverschlüsseln");
  447.     i=scanf_mask(sw1,0,"x",pfad);
  448.     if(i==13 && pfad[0]>32)
  449.     {/* wenn Schluessel ok    */
  450.         encrypt_file("demo.c","demohide.sic",pfad,BELASSEN);/* Verschluessele Datei */
  451.         n=check_file_cryptation("demo.c",&anzahl,&auftritt,&abweichung,&koeff);
  452.         if(n>1l)
  453.         {/* Wie ist der Statistikbericht der datei    */
  454.             en1=load_window("demo3.wnd");
  455.             print_mask(en1,0,"x","DEMO.C",n,anzahl,auftritt,abweichung,koeff);
  456.             move_window(en1,4,HOCH);
  457.         }
  458.         n=check_file_cryptation("demohide.sic",&anzahl,&auftritt,&abweichung,&koeff);
  459.         if(n>1l)
  460.         {
  461.             en2=load_window("demo3.wnd");
  462.             print_mask(en2,0,"x","DEMOHIDE.SIC",n,anzahl,auftritt,abweichung,koeff);
  463.             move_window(en2,6,RUNTER);
  464.             dateis[6].aktiv=1;
  465.         }
  466.         wait_of_action();
  467.         close_window(en1);
  468.         close_window(en2);
  469.     }
  470.     close_window(sw1);
  471.     break;
  472.  
  473. case 6:    sw1=load_window("demo2.wnd");
  474.     set_help_name("Dateientschlüsseln");
  475.     i=scanf_mask(sw1,0,"x",pfad);
  476.     if(i==13 && pfad[0]>32)
  477.     {
  478.         decrypt_file("demohide.sic","demo.sic",pfad,BELASSEN);/* Entschluessele    */
  479.         n=check_file_cryptation("demohide.sic",&anzahl,&auftritt,&abweichung,&koeff);
  480.         if(n>1l)
  481.         {
  482.             en1=load_window("demo3.wnd");
  483.             print_mask(en1,0,"x","DEMOHIDE.SIC",n,anzahl,auftritt,abweichung,koeff);
  484.             move_window(en1,4,HOCH);
  485.         }
  486.         n=check_file_cryptation("demo.sic",&anzahl,&auftritt,&abweichung,&koeff);
  487.         if(n>1l)
  488.         {
  489.             en2=load_window("demo3.wnd");
  490.             print_mask(en2,0,"x","DEMO.SIC",n,anzahl,auftritt,abweichung,koeff);
  491.             move_window(en2,6,RUNTER);
  492.         }
  493.         wait_of_action();
  494.         close_window(en1);
  495.         close_window(en2);
  496.     }
  497.     close_window(sw1);
  498.     break;
  499.  
  500. case 8: ende=dialog2("Wollen Sie das Programm wirklich beenden","Ende","Weiter",3,2);
  501.     break;
  502.  
  503. default:break;
  504. }
  505.  
  506.  
  507. set_color_table(0);
  508.  
  509. close_window(sb);
  510. return(ende);
  511. }
  512.  
  513.  
  514.  
  515.  
  516.  
  517. /*****************************************************************************
  518. *Name :windowmenu
  519. *Typ  :int
  520. *Zweck:Steuert das Geschehen bei Windowmenu
  521. *
  522. *
  523. *        Name    Typ    Zweck
  524. *Aufrufpara :
  525. *
  526. *Rueckgabep :
  527. *
  528. *Funktionswt:        0    Immer
  529. *
  530. *****************************************************************************/
  531. int windowmenu()
  532. {
  533. int wahl,col;
  534. WINDOW sw1=0;
  535.  
  536. col=which_color_table();
  537. set_help_name("Fenster");
  538.  
  539.  
  540. wahl=choose_sub_menu(windows,8,&sw1);
  541. switch(wahl){
  542. case 0: set_help_name("Dynamische Fenster");
  543.     zeige_dyn_fenster();
  544.     break;
  545.  
  546. case 1: set_help_name("Stapeln Fenster");
  547.     zeige_stapeln_window();
  548.     break;
  549.  
  550. case 2: break;
  551.  
  552. case 3: set_help_name("Fensterbeschreiben");
  553.     zeige_schreiben_window();
  554.     break;
  555.  
  556. case 5: set_help_name("Fenster Farbe");
  557.     zeige_fenster_farbe();
  558.     break;
  559.  
  560. case 6: break;
  561.  
  562. case 7: set_help_name("Fenster verfügbar");/* Setze die Aktivposten fest    */
  563.     windowsm[0].aktiv=windows[0].aktiv;
  564.     windowsm[1].aktiv=windows[1].aktiv;
  565.     windowsm[2].aktiv=windows[3].aktiv;
  566.     windowsm[3].aktiv=windows[4].aktiv;
  567.  
  568.     choose_button("Setzen Sie die verfügbaren Positionen",windowsm,4,20,4);
  569.     windows[0].aktiv=windowsm[0].aktiv;
  570.     windows[1].aktiv=windowsm[1].aktiv;
  571.     windows[3].aktiv=windowsm[2].aktiv;
  572.     windows[4].aktiv=windowsm[3].aktiv;
  573.     break;
  574.  
  575.  
  576. default:{break;}
  577. }
  578.  
  579. close_window(sw1);
  580. set_color_table(col);
  581. NORMAL
  582. return(0);
  583. }
  584.